#ifndef BASEUI_H
#define BASEUI_H

#include "ADDObjetBase.h"

#include <QtGui/QWidget>
#include <vector>

#include "StatusCode.h"

class QVBoxLayout;
class QHBoxLayout;
class QPushButton;

/**
 * Classe de base de tous les widgets "normaux", est capable
 * d'afficher un nombre quelconque de boutons, possède un layout.
 * C'est une classe abstraite.
 *
 * Cette classe possède un layout vertical (ou seront placé les
 * différents éléments) et un layout horizontal (pour les boutons). Le
 * nombre de boutons pouvant être affichés est quelconque. Les boutons
 * sont à placer dans le conteneur boutons, dans l'ordre d'apparition
 * à l'écran.  Les divers widgets que l'on veut afficher sont à mettre
 * dans fenetreLayout, puis, une fois cela fini, on appelle
 * setFenetreLayout().
 *
 * La classe possède un niveau de sortie interne BaseUI::interne, qui
 * peut être réglé avec la méthode BaseUI::setLevel.
 *
 * @author Johan "Solo" Luisier
 */
class BaseUI : public QWidget, public ADDObjetBase
{
  Q_OBJECT
 public:
  BaseUI(const QString& nom = "", QWidget *parent = 0);
  BaseUI(const BaseUI& baseUI);
  virtual ~BaseUI();
  static void setLevel( const DebugLevelType& Level, const unsigned& );
 protected:
  /**
   * Permet de savoir si le choix est validé ou annulé.
   */
  bool OK;
  /**
   * Conteneur des boutons existants dans le widget. L'ordre de
   * remplissage est l'ordre d'apparition.
   */
  std::vector< QPushButton* > boutons;
  /**
   * Layout de la fenêtre.
   */
  QVBoxLayout *fenetreLayout;
  /**
   * Layout des boutons.
   */
  QHBoxLayout *boutonsLayout;
  /**
   * Niveau de sortie de la classe.
   */
  static DebugLevelType interne;
  void setBoutonsLayout();
  void setFenetreLayout();
 protected slots:
  virtual void fermer();
  virtual void annuler();
};

#endif // BASEUI_H

